import axios from 'axios';

const baseURL = '/api/chat';

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 可以在这里设置请求头等信息
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
axios.interceptors.response.use(
  response => {
    return response.data;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

/**
 * 获取聊天模型列表
 * @returns {Promise<Array>} 模型列表
 */
export function getChatModelList() {
  return axios.get(`${baseURL}/models`);
}

/**
 * 获取用户的聊天会话列表
 * @param {number} userId 用户ID
 * @returns {Promise<Array>} 会话列表
 */
export function getChatSessionList(userId) {
  return axios.get(`${baseURL}/sessions`, {
    params: { userId }
  });
}

/**
 * 创建聊天会话
 * @param {Object} data 会话数据
 * @returns {Promise<string>} 会话ID
 */
export function createChatSession(data) {
  return axios.post(`${baseURL}/sessions`, data);
}

/**
 * 更新聊天会话
 * @param {Object} data 会话信息
 * @returns {Promise<void>}
 */
export function updateChatSession(data) {
  return axios.put(`${baseURL}/sessions/${data.sessionId}`, data);
}

/**
 * 删除聊天会话
 * @param {string} sessionId 会话ID
 * @returns {Promise<void>}
 */
export function deleteChatSession(sessionId) {
  return axios.delete(`${baseURL}/sessions/${sessionId}`);
}

/**
 * 获取会话的消息列表
 * @param {string} sessionId 会话ID
 * @returns {Promise<Array>} 消息列表
 */
export function getChatMessageList(sessionId) {
  return axios.get(`${baseURL}/sessions/${sessionId}/messages`);
}

/**
 * 发送聊天消息
 * @param {Object} data 消息数据
 * @returns {Promise<number>} 消息ID
 */
export function sendChatMessage(data) {
  return axios.post(`${baseURL}/messages`, data);
}

/**
 * 上传聊天文件
 * @param {File} file 文件对象
 * @param {string} sessionId 会话ID
 * @param {number} userId 用户ID
 * @returns {Promise<number>} 附件ID
 */
export function uploadChatFile(file, sessionId, userId) {
  const formData = new FormData();
  formData.append('file', file);
  formData.append('sessionId', sessionId);
  formData.append('userId', userId);
  
  return axios.post(`${baseURL}/attachments`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

/**
 * 获取消息附件列表
 * @param {number} messageId 消息ID
 * @returns {Promise<Array>} 附件列表
 */
export function getChatAttachments(messageId) {
  return axios.get(`${baseURL}/messages/${messageId}/attachments`);
}

/**
 * 获取聊天模型分页列表
 * @param {Object} params 查询参数
 * @returns {Promise<Object>} 分页结果
 */
export function getChatModelPage(params) {
  return axios({
    url: `${baseURL}/model/page`,
    method: 'post',
    data: params
  });
}

/**
 * 获取聊天模型详情
 * @param {number} id 模型ID
 * @returns {Promise<Object>} 模型详情
 */
export function getChatModel(id) {
  return axios({
    url: `${baseURL}/model/${id}`,
    method: 'get'
  });
}

/**
 * 获取聊天会话分页列表
 * @param {Object} params 查询参数
 * @returns {Promise<Object>} 分页结果
 */
export function getChatSessionPage(params) {
  return axios({
    url: `${baseURL}/session/page`,
    method: 'post',
    data: params
  });
}

/**
 * 获取聊天会话详情
 * @param {string} sessionId 会话ID
 * @returns {Promise<Object>} 会话详情
 */
export function getChatSession(sessionId) {
  return axios({
    url: `${baseURL}/session/${sessionId}`,
    method: 'get'
  });
}

/**
 * 获取AI回复
 * @param {string} sessionId 会话ID
 * @param {string} prompt 提示词
 * @param {number} modelId 模型ID
 * @returns {Promise<string>} AI回复
 */
export function getChatAiResponse(sessionId, prompt, modelId) {
  return axios({
    url: `${baseURL}/message/ai-response`,
    method: 'get',
    params: {
      sessionId,
      prompt,
      modelId
    }
  });
}

/**
 * 获取会话的附件列表
 * @param {string} sessionId 会话ID
 * @returns {Promise<Array>} 附件列表
 */
export function getChatAttachmentsBySession(sessionId) {
  return axios({
    url: `${baseURL}/attachment/session/${sessionId}`,
    method: 'get'
  });
}

/**
 * 删除附件
 * @param {number} id 附件ID
 * @returns {Promise<void>}
 */
export function deleteChatAttachment(id) {
  return axios({
    url: `${baseURL}/attachment/${id}`,
    method: 'delete'
  });
} 